package guibuilder;

import java.awt.Font;
import java.awt.Graphics;
import java.awt.geom.Rectangle2D;

/* <p>Materialien zu den zentralen
* Abiturpruefungen im Fach Informatik ab 2012 in 
* Nordrhein-Westfalen.</p>
* <p>Klasse GraphNode</p>
* <p>Ein ungerichteter Graph besteht aus einer Menge 
* von Knoten und einer Menge von Kanten. Die Kanten 
* verbinden jeweils zwei Knoten und koennen ein Gewicht haben.
* Objekte der Klasse GraphNode sind Knoten eines Graphen. 
* Ein Knoten hat einen Namen und kann markiert werden.</p>
* 
* <p>NW-Arbeitsgruppe: Materialentwicklung zum Zentralabitur 
* im Fach Informatik</p>
* 
* @version 2010-10-22
*/
public class GraphNode {
   private String name; 
   private int x1,y1,width,height;
  
   private boolean marked;

   /**
    *Ein Knoten mit dem Namen pName wird erzeugt. 
    *Der Knoten ist nicht markiert. 
    *@param pName Bezeichnung des Knotens
    */
   public GraphNode(String pName) { 
       name=pName;          
       marked=false;
   }
   
   public GraphNode(String pName, int px, int py) { 
       name=pName;          
       marked=false;
       x1=px;
       y1=py;
   }
   
   /**
    * Der Knoten wird markiert. Falls er 
    * nicht markiert ist, sonst bleibt er unveraendert.
    */  
   public void mark() {
       marked=true;
   }
   
   /**
    * Die Markierung des Knotens wird entfernt, falls er markiert ist, 
    * sonst bleibt er unveraendert.
    */
   public void unmark() {
       marked=false;
   }
   
   public void setcoordinates(int px1,  int py1 )
   {
       x1 = px1;
       y1 = py1;
   }
   
   public int getx1coordinates()
   {
       return x1;
   }
   
   public int gety1coordinates()
   {
       return y1;
   }
   
   /**
    * Die Anfrage liefert den Wert true, wenn der Knoten markiert ist, 
    * sonst liefert sie den Wert false.
    * @return true falls markiert, sonst false
    */  
   public boolean isMarked() 
   {
       return marked;
   }
   
   /**
    * Die Anfrage liefert den Namen des Knotens.
    * @return Bezeichnung des Knotens
    */  
   public String getName()   
   {
       return name;
   }
   
   public void paint( Graphics g, int w, int h )
   {
        g.setFont(new Font("Tahoma", Font.PLAIN, 50));   //Schriftart
        Rectangle2D abmessung = g.getFontMetrics().getStringBounds(name, g);
        width = (int)(abmessung.getWidth()*1.5d);
        height = (int)(abmessung.getHeight()*1.5d);
        g.drawOval(x1, y1,width,height);
        g.drawString(name, x1+(int)(abmessung.getWidth()*0.25d), y1 + g.getFontMetrics().getLeading() + g.getFontMetrics().getAscent() + (int)(abmessung.getHeight()*0.25d));
        //g.drawLine( (int)(x1 * width), (int)(y1 * height), (int)(x2 * width), (int)(y2 * height));
    }
    
    public int getwidth()
    {
        return width;
    }
    
    public int getheight()
    {
        return height;
    }
